#简单的变量和数据类型
from fileinput import filename

###2.1运行hello_word.py
print('Hello Python world!')

###2.2变量
message = 'Hello Python world!'
print(message)

message = 'Hello Python Crash Course world!'
print(message)
##Python 将始终记录变量的最新值

###2.2.1变量的命名和使用
#变量只能包含字母、数字和下划线，且不能以数字开头
#变量名不可以包含空格
#不要将Python的关键字和函数名作为变量、
#变量慎用字母l和大写字母o，可能被错看为数字1和0

#动手试一试
##练习2.1 将一条简单的消息赋给变量，并将其打印出来
message = '熊康的小名叫做臭狗熊'
print(message)

##练习2.2多条简单消息
message = '熊康是小可爱'
print(message)

message = '谁是小可爱请举手'
print(message)

message = '哦，原来你是小可爱啊！'
print(message)

###字符串
#在Python 中，用引号引起来的都是字符串，可以用单引号也可以用双引号
'this is a string'
"this is also a string."
'I told my friend, "Python is my favorite language!"'
"The language 'Python is named after Monty Python, not the snake.'"

##使用方法修改字符串的大小写
name = 'ada_lovelace'
print(name.title())
#title()方法出现在这个变量后面，name后面的句点.是让Python对name变量执行title（）方法指定的操作
#title()方法的作用是以首字母大写的方式显示每个单词

#单词的字母全部小写和全部大写
print(name.lower())
print(name.upper())

#在字符串中使用变量
#在一些情况下，可能想在字符串中使用变量的值。例如，可能想使用两个变量分别表示名和姓，再合并这两个值以显示姓名
first_name = 'ada'
last_name = 'lovelace'
full_name = f"{first_name} {last_name}"#这种字符串叫做f字符串，f是format（设置格式）的简称
print(full_name)

full_name = f"{first_name}{last_name}"#这种字符串叫做f字符串，f是format（设置格式）的简称
print(full_name)

full_name = f"{first_name}_{last_name}"#这种字符串叫做f字符串，f是format（设置格式）的简称
print(full_name)

#使用f字符串可以完成很多任务
full_name = f"{first_name} {last_name}"
print(f"hello,{full_name.title()}!")

#还可以使用f字符串来创建消息，再把整条消息赋值给变量
message = f"Hello, {full_name.title()}!"
print(message)
#此种方法更好

###2.3.3使用制表符或换行符来添加空白
#要在字符串中添加制表符，可以使用字符组合\t
#制表符，首行缩进四个字母
print('Python')
print('\tPython')

#要在字符串中添加换行符，可以使用字符组合\n
print("Languages:\nPython\nC\nJavaScript")

#还可以在同一个字符串中同时包含制表符和换行符。使之换行并且首行缩进四个字母
print('Languages:\n\tPython\n\tC\n\tJavaScript')

##在接下来的章节中，使用寥寥几行就可以生成很多行代码，制表符和换行符将会提供极大的帮助

###删除空白
#在程序中，额外的空白可能令人迷惑。对程序员来说，'Python'和'Python '看起来没什么两样，但是对于程序来说，他们是两个不同的字符串
#空白很重要，因为你经常要比较两个字符串是否相同
#Python能够找出字符串左端和右端多余的空白
#要确保字符串右端没用空白，可使用rstrip()方法
favorite_language = '  python  '
print(favorite_language)

print(favorite_language.rstrip())

#但是使用rstrip()方法不会改变这个变量，只会临时消除字符串右端的空白
#要想永久消除这个字符串的右端的空白，必须将这个变量重新赋值，即必须将删除操作的结果关联到之前的变量
favorite_language = favorite_language.rstrip()
print(favorite_language)
#在编程中，经常需要修改变量的值，再将新值关联到原来的变量。这就是变量的值可能随程序的运行或用户的输入数据发生变化的原因所在

#删除字符串左端的空白，可以使用lsrtip()方法
favorite_language = favorite_language.lstrip()
print(favorite_language)

#要想同时删除字符串左端和右端的空白，可以分别使用这两个方法，或者使用strip()方法
print("删除两端空白")
favorite_language = '  Python  '
print(favorite_language)
print(favorite_language.strip())
favorite_language = favorite_language.rstrip()
print(favorite_language)
favorite_language = favorite_language.lstrip()
print(favorite_language)

###删除前缀
#另一个常见的字符串处理任务是删除前缀。
#假设有一个URL包含常见的前缀https://，你想删除这个前缀
nostarch_url = 'https://nostarch.com'
simple_url = nostarch_url.removeprefix('https://')
print(simple_url)

simple_url = nostarch_url.removesuffix('.com')
print(simple_url)

###如何在使用字符串时避免语法错误
#语法错误是一种你会不时遇到的错误。当程序中包含非法分Python代码时，就会导致语法错误
#例如，在一个用单引号引起的字符串中包含一个撇号，就会引起错误。
#此时必须用双引号引起这个字符串
#同理，在双引号引起的字符中若有一个双引号，那么也会出现错误
#此时必须用单引号引起这个变量


###习题，动手试一试

#练习2.3个性化消息
name = 'Eric'
var1 = 'Hello'
var2 = 'would you like to learn some Python today?'
print(f"{var1} {name}, {var2}")
#这样也可以
print("Hello "+name+", would you like to learn some Python today?")

#练习2.4调整名字的大小写
name = 'liao'
Name = name.title()
name_upper = name.upper()
name_lower = name.lower()
print(Name)
print(name_upper)
print(name_lower)

#练习2.5名言1
print('Albert Einstein once said, "A person who never made a mistake never tried anything new."')

#练习2.6名言2
famous_person = 'Albert Einstein'
var3 = ' once said, "A person who never made a mistake never tried anything new."'
message = famous_person + var3
print('\n'+message)

#练习2.7删除人名中的空白
name = ('\t liao \n')
print(name)

print(name.lstrip()+'\n')
print(name.rstrip()+"\n")
print(name.strip())

#练习2.8 文件扩展名
#Python 提供了removesuffix()方法，其工作原理与removeprefix()方法很像。
filename_1 = 'python_notes.txt'
print(filename_1.removesuffix('.txt'))

